<?php
/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright 2011 Oracle and/or its affiliates. All rights reserved.
 *
 * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
 * Other names may be trademarks of their respective owners.
 *
 * The contents of this file are subject to the terms of either the GNU
 * General Public License Version 2 only ("GPL") or the Common
 * Development and Distribution License("CDDL") (collectively, the
 * "License"). You may not use this file except in compliance with the
 * License. You can obtain a copy of the License at
 * http://www.netbeans.org/cddl-gplv2.html
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
 * specific language governing permissions and limitations under the
 * License.  When distributing the software, include this License Header
 * Notice in each file and include the License file at
 * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the GPL Version 2 section of the License file that
 * accompanied this code. If applicable, add the following below the
 * License Header, with the fields enclosed by brackets [] replaced by
 * your own identifying information:
 * "Portions Copyrighted [year] [name of copyright owner]"
 *
 * If you wish your version of this file to be governed by only the CDDL
 * or only the GPL Version 2, indicate your decision by adding
 * "[Contributor] elects to include this software in this distribution
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
 * single choice of license, a recipient has the option to distribute
 * your version of this file under either the CDDL, the GPL Version 2 or
 * to extend the choice of license to its licensees as provided above.
 * However, if you add GPL Version 2 code and therefore, elected the GPL
 * Version 2 license, then the option applies only if the new code is
 * made subject to such option by the copyright holder.
 *
 * Contributor(s):
 *
 * Portions Copyrighted 2011 Sun Microsystems, Inc.
 */

/**
 * Miscellaneous utility methods.
 */
final class Utils {

    private function __construct() {
        
    }

    /**
     * Format date.
     * @param DateTime $date date to be formatted
     * @return string formatted date
     */
    public static function formatDate(DateTime $date = null) {
        if ($date === null) {
            return '';
        }
        return $date->format('m/d/Y');
    }

    /**
     * Format date and time.
     * @param DateTime $date date to be formatted
     * @return string formatted date and time
     */
    public static function formatDateTime(DateTime $date = null) {
        if ($date === null) {
            return '';
        }
        return $date->format('m/d/Y H:i');
    }

    public static function getCurrrentTime() {
        $date = new DateTime();

        return $date->format('Y-m-d H:i:s');
    }

    /**
     * Redirect to the given page.
     * @param type $page target page
     * @param array $params page parameters
     */
    public static function redirect($page, $params = array()) {
        $link = 'Location: ' . $page;
        $link = $page;
        if (count($params) >= 1) {
            $link = $link . '?' . http_build_query($params);
        }
        //header($link, true);
        //die();
        echo'<script> window.location="' . $link . '"; </script> ';
    }

    /**
     * Get value of the URL param.
     * @return string parameter value
     * @throws NotFoundException if the param is not found in the URL
     */
    public static function getUrlParam($name) {
        if (!array_key_exists($name, $_GET)) {
            throw new NotFoundException('URL parameter "' . $name . '" not found.');
        }
        return $_GET[$name];
    }

    /**
     * Capitalize the first letter of the given string
     * @param string $string string to be capitalized
     * @return string capitalized string
     */
    public static function capitalize($string) {
        return ucfirst(mb_strtolower($string));
    }

    /**
     * Escape the given string
     * @param string $string string to be escaped
     * @return string escaped string
     */
    public static function escape($string) {
        return htmlspecialchars($string, ENT_QUOTES);
    }

    public static function isStringValid($string) {
        if (is_null($string) && strlen($string) < 5) {
            return false;
        }
        return true;
    }

    public static function getValPost($param) {
        return filter_input(INPUT_POST, $param);
    }

    public static function getValGet($param) {
        return filter_input(INPUT_GET, $param);
    }

    public static function validateUser() {
        if (self::getCurrentPage() == Config::HOME_PAGE || self::getCurrentPage() == Config::IMPORT_PAGE) {
            return;
        }
        if (isset($_SESSION['id'])) {
            return;
        }
        self::redirect('index.php', array('message' => 'Authorization required.'));
    }

    public static function getCurrentPage() {
        $link = $_SERVER['PHP_SELF'];
        $pages = explode('/', $link);
        if (count($pages) > 1) {
            return $pages[count($pages) - 1];
        }
        return '';
    }

    public static function objectToArray($object) {
        if (!is_object($object) && !is_array($object)) {
            return $object;
        }
        if (is_object($object)) {
            $object = get_object_vars($object);
        }
        return array_map('self::objectToArray', $object);
    }

    public static function print_pagination($page, $totalPage) {
        ?>
        <div class="pagination">
            <ul>
        <?php
        for ($index = 1; $index <= $totalPage; $index++) {
            $active = ($index == $page);
            echo '<li class=\'' . (($active) ? 'running' : '') . "'>";
            if (!$active) {
                echo '<a href="main.php?p=' . $index . '">' . $index . "</a>";
            } else {
                echo $index;
            }
            echo "</li>";
        }
        ?>
            </ul>
        </div>
    <?php
    }
    
    public static function print_paging($paging) {
        ?>
        <div id = "paging">
                    <div id = "pagingCount">
                        <?= $paging->totalCountDisplay; ?>
                    </div>
                    <div id = pagingLink>
                        <?php
                        if ($paging->first != "") {
                            echo $paging->firstLink;
                        }
                        if ($paging->preview != "") {
                            echo $paging->previewLink;
                        }
                        if ($paging->linkActionList != "") {
                            foreach ($paging->linkActionList as $value) {
                                echo $value ;
                            }
                        }
                        if ($paging->next != "") {
                            echo $paging->nextLink;
                        }
                        if ($paging->last != "") {
                            echo $paging->lastLink;
                        }
                        ?>
                    </div>
                </div>
    <?php
    }
}
?>